<?php
    /**
     * Application level Controller
     *
     * This file is application-wide controller file. You can put all
     * application-wide controller-related methods here.
     *
     * @link          http://cakephp.org CakePHP(tm) Project
     * @package       app.Controller
     * @since         CakePHP(tm) v 0.2.9
     */

    App::uses('Controller', 'Controller');

    /**
     * Application Controller
     *
     * Add your application-wide methods in the class below, your controllers
     * will inherit them.
     *
     * @package		app.Controller
     * @link		http://book.cakephp.org/2.0/en/controllers.html#the-app-controller
     */
    class AppController extends Controller {

        var $helpers = array('Form', 'Html', 'Session', 'Js', 'Usermgmt.UserAuth','FilterResults.Search');
        public $components = array('Session','RequestHandler', 'Usermgmt.UserAuth','FilterResults.Filter' => array(
            'auto' => array(
                'paginate' => false,
                'explode'  => true,  // recomendado
            ),
            'explode' => array(
                'character'   => ' ',
                'concatenate' => 'AND',
            )
        ));
        function beforeFilter(){
            $this->userAuth();
        }
        private function userAuth(){
            $this->UserAuth->beforeFilter($this);
        }


        /**
         * showMessage method
         * Formata o metodo setFlash de modo mais facil
         * @var $message String;
         * @var $other Array('type','close','title');
         */
        protected function showMessage($message,$option =array())
        {
            $msg = '';
            if(!empty($message)){
                $btnCloseMsg = '<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>';
                $msg = $this->Session->setFlash($btnCloseMsg.$message,'default',array('class'=>'alert alert-warning'));
                if((is_array($option)) && (count($option) > 0)){
                    $title      = isset($option['title']) && !empty($option['title'])? "<strong>".$option['title']."</strong>&nbsp;":'';
                    $type       = isset($option['type']) && !empty($option['type'])? $option['type']: 'warning';
                    $close      = isset($option['close']) && $option['close']==false? '':$btnCloseMsg;
                    $message = $close.$title.$message;
                    $msg = $this->Session->setFlash($message,'default',array('class'=>'alert alert-'.$type,'escape'=>false));
                }
            }
            return $msg;
        }

        protected function tokenUser(){
            $constant = "1s5d258ewr58523wfdhsk1ghkh54521gfsd89hgh";
            $pass_name = "963f79c6caaded55a762d3f8fc14f2d2c3807fb0".strtotime('d-m-Y H:i:s');
            $user_id = $this->Session->read('UserAuth.User.id');
            $tokenUser = sha1($constant.$user_id.$pass_name);
            return $tokenUser;
        }


        protected function msgSave($status = true){
            if($status == true){
                return $this->showMessage('O registro foi salvo com sucesso!',array('type'=>'success','title'=>'SALVO:'));
            }
            return $this->showMessage("O registro não pode ser salva. Tentem mais tarde.",array('type'=>'danger','title'=>'ERROR AO SALVAR:'));
        }

        protected function msgDelete($status = true){
            if($status == true){
                return $this->showMessage('O registro foi excluido com sucesso!',array('type'=>'success','title'=>'DELETADO:'));
            }
            return$this->showMessage("O registro não pode ser excluido. Tentem mais tarde.",array('type'=>'danger','title'=>'ERROR AO EXCLUIR:'));
        }

        protected function msgEdit($status = true){
            if($status == true){
                return $this->showMessage('O registro foi atulizado com sucesso!',array('type'=>'success','title'=>'ATUALIZADO:'));
            }
            return $this->showMessage("O registro não pode ser atulizado. Tentem mais tarde.",array('type'=>'danger','title'=>'ERROR AO ATUALIZAR:'));
        }

        protected function msgNotFould(){
            return $this->showMessage('Não foi possivel encontrar este registro',array('type'=>'danger','title'=>'ERROR:'));
        }

        protected function dateDBFormat($dateFormat=null){
            $dia= null;
            $mes = null;
            $ano = null;
            $data = "00/00/0000";
            if(!empty($dateFormat)){
                list($dia,$mes,$ano) = explode('/',$dateFormat);
                $data = $ano."-".$mes."-".$dia;
                return $data;
            }
            return $data;
        }

        protected function somar_dias_uteis($str_data, $int_qtd_dias_somar = 7) {

            // Caso seja informado uma data do tipo DATETIME - aaaa-mm-dd 00:00:00
            // Transforma para DATE - aaaa-mm-dd
            $str_data = substr($str_data,0,10);

            // Se a data estiver no formato brasileiro: dd/mm/aaaa
            // Converte-a para o padrão americano: aaaa-mm-dd
            if ( preg_match("@/@",$str_data) == 1 ) {
                $str_data = implode("-", array_reverse(explode("/",$str_data)));
            }

            $array_data = explode('-', $str_data);
            $count_days = 0;
            $int_qtd_dias_uteis = 0;
            while ( $int_qtd_dias_uteis < $int_qtd_dias_somar ) {
                $count_days++;
                if ( ( $dias_da_semana = gmdate('w', strtotime('+'.$count_days.' day', mktime(0, 0, 0, $array_data[1], $array_data[2], $array_data[0]))) ) != '0' && $dias_da_semana != '6' ) {
                    $int_qtd_dias_uteis++;
                }
            }
            return gmdate('Y-m-d',strtotime('+'.$count_days.' day',strtotime($str_data)));
        }

        protected function noMoney($valor=null){
            $novo_valor = str_replace('.','',$valor);
            $novo_valor = str_replace(',','.',$novo_valor);
            return $novo_valor;
        }

        protected function money($valor=null){
            App::uses('CakeNumber', 'Utility');
            CakeNumber::addFormat('BRL',array('before'=>'','negative'=>'- ','thousands'=>'.','decimals'=>',','places'=>2,'zero'=>0));
            $valor = CakeNumber::currency($valor,'BRL');
            return $valor;
        }

        protected function converteData($data=null){
            if(!empty($data)){
                return strtotime($data);
            }
            return false;
        }

        protected function calcularParcelas($dtVencimento,$nParcelas,$frequencia){
            $dataExplode = explode( "/",$dtVencimento );

            $dia = $dataExplode[0];
            $mes = $dataExplode[1];
            $ano = $dataExplode[2];

            for ($i=1;$i<=$nParcelas;$i++){
                for($f=1;$f<=$frequencia;$f++){
                    $mes = $mes+1;
                    if ($mes >12){
                        $mes = 1;
                        $ano = $ano+1;
                    }
                }
                return date( "d/m/Y",mktime(0,0,0,$mes,$dia,$ano));
            }
        }

    }
